package com.jinmdz.fmis.core.wrapper;

import com.jinmdz.fmis.core.base.BaseResult;
import com.jinmdz.fmis.core.constant.EResultCode;

import java.io.Serializable;

/**
 * Result封装处理类
 *
 * @author LiCongLu
 * @date 2019-12-20 13:54
 */
public final class ResultWrapper {
    /**
     * 创建一个返回结果
     *
     * @param resultCode 返回结果枚举
     * @return BaseResult
     * @author LiCongLu
     * @date 2019-12-20 13:56
     */
    public static BaseResult getResult(EResultCode resultCode) {
        return new BaseResult(resultCode);
    }


    /**
     * 创建一个返回结果
     *
     * @param code 返回结果枚举
     * @return BaseResult
     * @author LiCongLu
     * @date 2019-12-20 14:14
     */
    public static BaseResult getResult(Integer code) {
        return getResult(EResultCode.getEResultCode(code));
    }

    /**
     * 获取默认结果
     *
     * @param
     * @return
     * @author LiCongLu
     * @date 2019-12-24 15:00
     */
    public static BaseResult getResult() {
        return getResult(EResultCode.CODE0);
    }

    /**
     * 获取失败结果
     *
     * @param message 失败信息
     * @return
     * @author LiCongLu
     * @date 2020-01-10 10:43
     */
    public static BaseResult failure(String message) {
        return getResult().setResultCode(EResultCode.CODE0).setMessage(message);
    }

    /**
     * 获取成功结果
     *
     * @param message 成功信息
     * @return
     * @author LiCongLu
     * @date 2020-01-10 10:44
     */
    public static BaseResult success(String message) {
        return getResult().setResultCode(EResultCode.CODE1).setMessage(message);
    }

    /**
     * 创建一个带有数据类型的结果
     *
     * @param
     * @return
     * @author LiCongLu
     * @date 2019-12-20 15:36
     */
    public static <T extends Serializable> BaseResult<T> getBaseResult() {
        BaseResult<T> result = new BaseResult<>();
        result.setResultCode(EResultCode.CODE0);
        return result;
    }

    /**
     * 创建一个带有数据类型的结果
     *
     * @param
     * @return
     * @author LiCongLu
     * @date 2019-12-20 15:36
     */
    public static <T> BaseResult<T> getBResult() {
        BaseResult<T> result = new BaseResult<>();
        result.setResultCode(EResultCode.CODE0);
        return result;
    }

    /**
     * 返回基于数据结果的错误结果
     *
     * @param message
     * @param <T>
     * @return
     */
    public static <T extends Serializable> BaseResult<T> dataFailure(String message) {
        BaseResult<T> result = new BaseResult<>();
        result.setResultCode(EResultCode.CODE0).setMessage(message);
        return result;
    }

    /**
     * 返回一个基于特定结果枚举的数据结果
     *
     * @param code 结果枚举
     * @return
     * @author LiCongLu
     * @date 2020-05-26 15:35
     */
    public static <T extends Serializable> BaseResult<T> getResultData(EResultCode code) {
        BaseResult<T> result = new BaseResult<>();
        result.setResultCode(code);
        return result;
    }
}
